Java™ is a programming language that, at the source code level, is similar to object oriented programming languages such as C++. Java™ language source code is compiled into an intermediate representation based on a plurality “bytecodes” that define specific tasks. In some implementations, the bytecodes are further compiled to machine language for a particular processor. In order to speed the execution of Java™ language programs, some processors are specifically designed to execute some of the Java™ bytecodes directly.
Many times, a processor that directly executes Java™ bytecodes is paired with a general purpose processor so as to accelerate Java™ program execution in a general or special purpose machine. It would be advantageous to provide accelerations, similar to those seen for directly executed Java™ bytecodes, in other languages and development environments.
Also, it is often useful to monitor the execution of a software application for a variety of purposes, such as Dynamic Adaptive Compilation (“DAC”) hotspot detection, memory profiling, or to determine how often certain pieces of code are executed. Such application monitoring may be implemented by instrumentation of the software application code. Various implementations of code instrumentation result in code expansion and may call for changes in a Java™ platform used to execute the Java™ bytecodes. Thus, it would be desirable to provide more efficient code instrumentation that is not subject to code expansion and/or other drawbacks resulting from modification of the Java™ platform.